package study.仪器解析.串口化通信.生化仪.监听COM1;

import jssc.SerialPort;
import jssc.SerialPortEvent;
import jssc.SerialPortEventListener;
import jssc.SerialPortException;
import study.仪器解析.串口化通信.生化仪.ASTMParser;
import study.仪器解析.串口化通信.生化仪.十六进制转SCALL码;

/**
 * @Author 刘伟涛
 * @Date 2024/8/7 15:03
 **/
public class SerialPortReader {
    private SerialPort serialPort;

    public SerialPortReader(String portName) {
        serialPort = new SerialPort(portName);
    }

    public void initialize() {
        try {
            // 打开串口
            serialPort.openPort();

            // 设置串口参数
            serialPort.setParams(
                    SerialPort.BAUDRATE_9600,
                    SerialPort.DATABITS_8,
                    SerialPort.STOPBITS_1,
                    SerialPort.PARITY_NONE
            );

            // 设置事件监听器，监听串口数据到达事件
            serialPort.addEventListener(new SerialPortEventListener() {
                @Override
                public void serialEvent(SerialPortEvent event) {
                    if (event.isRXCHAR()) { // 检查是否有数据到达
                        try {
                            // 读取数据
                            String receivedData = serialPort.readString(event.getEventValue());
                            if(receivedData.trim().length() == 0){
                                return;
                            }
                            receivedData = "02-31-48-7C-5C-5E-26-7C-7C-7C-31-7C-7C-7C-7C-7C-32-7C-7C-31-7C-32-30-32-34-30-38-32-32-31-36-33-34-34-36-0D-03-39-39-0D-0A-02-32-50-7C-31-7C-7C-7C-7C-7C-7C-7C-C4-D0-7C-7C-7C-7C-7C-7C-5E-59-0D-03-44-36-0D-0A-02-33-4F-7C-31-7C-4B-4E-32-34-31-32-34-32-33-5E-31-5E-31-5E-31-7C-7C-7C-52-7C-32-30-32-34-30-38-32-32-31-33-35-35-33-38-7C-7C-7C-7C-7C-7C-7C-7C-7C-31-7C-7C-7C-7C-7C-7C-7C-7C-7C-7C-4F-0D-03-32-36-0D-0A-02-34-52-7C-31-7C-5E-5E-5E-41-4C-54-7C-31-39-2E-31-36-7C-55-2F-4C-7C-30-5E-35-30-5C-5E-7C-7C-7C-46-7C-7C-7C-7C-32-30-32-34-30-38-32-32-31-33-35-35-33-38-0D-03-32-31-0D-0A-02-35-4C-7C-31-7C-4E-0D-03-30-38-0D-0A-02-36-48-7C-5C-5E-26-7C-7C-7C-31-7C-7C-7C-7C-7C-32-7C-7C-31-7C-32-30-32-34-30-38-32-32-31-36-33-34-34-36-0D-03-39-45-0D-0A-02-37-50-7C-32-7C-7C-7C-7C-7C-7C-7C-C4-D0-7C-7C-7C-7C-7C-7C-5E-59-0D-03-44-43-0D-0A-02-30-4F-7C-31-7C-4B-4E-32-34-31-32-34-32-34-5E-32-5E-31-5E-32-7C-7C-7C-52-7C-32-30-32-34-30-38-32-32-31-33-35-35-34-36-7C-7C-7C-7C-7C-7C-7C-7C-7C-31-7C-7C-7C-7C-7C-7C-7C-7C-7C-7C-4F-0D-03-32-35-0D-0A-02-31-52-7C-31-7C-5E-5E-5E-41-4C-54-7C-38-2E-36-37-7C-55-2F-4C-7C-30-5E-35-30-5C-5E-7C-7C-7C-46-7C-7C-7C-7C-32-30-32-34-30-38-32-32-31-33-35-35-34-36-0D-03-46-31-0D-0A-02-32-4C-7C-31-7C-4E-0D-03-30-35-0D-0A-02-33-48-7C-5C-5E-26-7C-7C-7C-31-7C-7C-7C-7C-7C-32-7C-7C-31-7C-32-30-32-34-30-38-32-32-31-36-33-34-34-36-0D-03-39-42-0D-0A-02-34-50-7C-33-7C-7C-7C-7C-7C-7C-7C-C4-D0-7C-7C-7C-7C-7C-7C-5E-59-0D-03-44-41-0D-0A-02-35-4F-7C-31-7C-4B-4E-32-34-31-32-34-33-36-5E-33-5E-31-5E-33-7C-7C-7C-52-7C-32-30-32-34-30-38-32-32-31-33-35-35-35-36-7C-7C-7C-7C-7C-7C-7C-7C-7C-31-7C-7C-7C-7C-7C-7C-7C-7C-7C-7C-4F-0D-03-33-30-0D-0A-02-36-52-7C-31-7C-5E-5E-5E-41-4C-54-7C-32-2E-37-34-7C-55-2F-4C-7C-30-5E-35-30-5C-5E-7C-7C-7C-46-7C-7C-7C-7C-32-30-32-34-30-38-32-32-31-33-35-35-35-36-0D-03-45-46-0D-0A-02-37-4C-7C-31-7C-4E-0D-03-30-41-0D-0A-02-30-48-7C-5C-5E-26-7C-7C-7C-31-7C-7C-7C-7C-7C-32-7C-7C-31-7C-32-30-32-34-30-38-32-32-31-36-33-34-34-36-0D-03-39-38-0D-0A-02-31-50-7C-34-7C-7C-7C-7C-7C-7C-7C-C4-D0-7C-7C-7C-7C-7C-7C-5E-59-0D-03-44-38-0D-0A-02-32-4F-7C-31-7C-4B-4E-32-34-31-32-34-33-37-5E-34-5E-31-5E-34-7C-7C-7C-52-7C-32-30-32-34-30-38-32-32-31-33-35-36-30-31-7C-7C-7C-7C-7C-7C-7C-7C-7C-31-7C-7C-7C-7C-7C-7C-7C-7C-7C-7C-4F-0D-03-32-37-0D-0A-02-33-52-7C-31-7C-5E-5E-5E-41-4C-54-7C-33-2E-36-35-7C-55-2F-4C-7C-30-5E-35-30-5C-5E-7C-7C-7C-46-7C-7C-7C-7C-32-30-32-34-30-38-32-32-31-33-35-36-30-31-0D-03-45-34-0D-0A-02-34-4C-7C-31-7C-4E-0D-03-30-37-0D-0A-02-35-48-7C-5C-5E-26-7C-7C-7C-31-7C-7C-7C-7C-7C-32-7C-7C-31-7C-32-30-32-34-30-38-32-32-31-36-33-34-34-36-0D-03-39-44-0D-0A-02-36-50-7C-35-7C-7C-7C-7C-7C-7C-7C-C4-D0-7C-7C-7C-7C-7C-7C-5E-59-0D-03-44-45-0D-0A-02-37-4F-7C-31-7C-4B-4E-32-34-31-32-34-33-38-5E-35-5E-31-5E-35-7C-7C-7C-52-7C-32-30-32-34-30-38-32-32-31-33-35-36-30-35-7C-7C-7C-7C-7C-7C-7C-7C-7C-31-7C-7C-7C-7C-7C-7C-7C-7C-7C-7C-4F-0D-03-33-33-0D-0A-02-30-52-7C-31-7C-5E-5E-5E-41-4C-54-7C-33-2E-36-35-7C-55-2F-4C-7C-30-5E-35-30-5C-5E-7C-7C-7C-46-7C-7C-7C-7C-32-30-32-34-30-38-32-32-31-33-35-36-30-35-0D-03-45-35-0D-0A-02-31-4C-7C-31-7C-4E-0D-03-30-34-0D-0A-02-32-48-7C-5C-5E-26-7C-7C-7C-31-7C-7C-7C-7C-7C-32-7C-7C-31-7C-32-30-32-34-30-38-32-32-31-36-33-34-34-36-0D-03-39-41-0D-0A-02-33-50-7C-36-7C-7C-7C-7C-7C-7C-7C-C4-D0-7C-7C-7C-7C-7C-7C-5E-59-0D-03-44-43-0D-0A-02-34-4F-7C-31-7C-4B-4E-32-34-31-32-34-33-39-5E-36-5E-31-5E-36-7C-7C-7C-52-7C-32-30-32-34-30-38-32-32-31-33-35-36-31-33-7C-7C-7C-7C-7C-7C-7C-7C-7C-31-7C-7C-7C-7C-7C-7C-7C-7C-7C-7C-4F-0D-03-33-32-0D-0A-02-35-52-7C-31-7C-5E-5E-5E-41-4C-54-7C-33-2E-36-35-7C-55-2F-4C-7C-30-5E-35-30-5C-5E-7C-7C-7C-46-7C-7C-7C-7C-32-30-32-34-30-38-32-32-31-33-35-36-31-33-0D-03-45-39-0D-0A-02-36-4C-7C-31-7C-4E-0D-03-30-39-0D-0A-02-37-48-7C-5C-5E-26-7C-7C-7C-31-7C-7C-7C-7C-7C-32-7C-7C-31-7C-32-30-32-34-30-38-32-32-31-36-33-34-34-36-0D-03-39-46-0D-0A-02-30-50-7C-37-7C-7C-7C-7C-7C-7C-7C-C4-D0-7C-7C-7C-7C-7C-7C-5E-59-0D-03-44-41-0D-0A-02-31-4F-7C-31-7C-4B-4E-32-34-31-32-34-34-30-5E-37-5E-31-5E-37-7C-7C-7C-52-7C-32-30-32-34-30-38-32-32-31-33-35-36-32-30-7C-7C-7C-7C-7C-7C-7C-7C-7C-31-7C-7C-7C-7C-7C-7C-7C-7C-7C-7C-4F-0D-03-32-37-0D-0A-02-32-52-7C-31-7C-5E-5E-5E-41-4C-54-7C-34-38-2E-33-35-7C-55-2F-4C-7C-30-5E-35-30-5C-5E-7C-7C-7C-46-7C-7C-7C-7C-32-30-32-34-30-38-32-32-31-33-35-36-32-30-0D-03-31-41-0D-0A-02-33-4C-7C-31-7C-4E-0D-03-30-36-0D-0A-04";
                            System.out.println("接收到的数据：" + receivedData);
                            十六进制转SCALL码 hexToAsciiConverter = new 十六进制转SCALL码();
                            receivedData = hexToAsciiConverter.hexToAscii(receivedData);
                            System.out.println("转成SCALL码后：" + receivedData);

                            ASTMParser astmParser = new ASTMParser();
                            astmParser.parseASTMMessage(receivedData);

                        } catch (SerialPortException ex) {
                            System.out.println("Error in receiving data: " + ex);
                        }
                    }
                }
            });

        } catch (SerialPortException ex) {
            System.out.println("Error in initializing serial port: " + ex);
        }
    }

    public void close() {
        try {
            if (serialPort.isOpened()) {
                serialPort.closePort();
            }
        } catch (SerialPortException ex) {
            System.out.println("Error in closing serial port: " + ex);
        }
    }

    public static void main(String[] args) {
        SerialPortReader reader = new SerialPortReader("COM2");
        reader.initialize();

        // 添加一个简单的阻塞以便继续接收数据，通常使用线程管理
        try {
            Thread.sleep(10000000); // 运行10秒后停止
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        reader.close();
    }
}
